package org.ala.tiktools.rpc.kcp.protocol;

import java.util.List;

import org.ala.tiktools.rpc.kcp.protocol.segment.KcpSegment;
import org.ala.tiktools.tools.queue.IQueue;

import io.netty.buffer.ByteBuf;

/**
 *	接收端队列
 *
 *	@author ala
 *	@date 2025年4月26日
 */
public interface IKcpReceiverQueue extends IQueue<KcpSegment> {

	
	/**
     *  rcvQue 中一个完整消息的字节数
     *  <p>	其实可以在add的时候做成O(1)
     *  
     *  @return -1:queue为空 | -2:queue中还么有收到一个完整消息 | >0 一个完整消息的字节数
     */
    int peekSize();


    /**
     *  rcvQue -> ByteBuf，直到frg == 0为止
     *  @return  读取的字节数
     */
    int writeToByteBufAndRemove(ByteBuf buf);
    /**
     *  rcvQue[i].data -> bufs[i]，直到frg == 0为止
     *  @return  读取的字节数
     */
    int writeToByteBufsAndRemove(List<ByteBuf> bufs);


    /**
     *  将受到的数据按sn号升序放入sndBuf列表
     *  <p> sn号大概率收到的是排在末尾的
     */
    void parseData(KcpSegment seg);


    /**
     * 当前队列长度是否超过远程窗口
     */
	boolean isWarningLine(int rcvWnd);
}
